iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0

了解了 Django 的運作之後,相信大家一步步對 Django 的操作更佳的熟悉,在前面我們介紹了 Model , View, Url,疑,那 MTV 當中的 T - Template 呢? 由於這系列文章為 API的實作,比較不會用到 Template 的功能,為了怕模糊焦點,就不多介紹 Template了。有興趣的朋友還是可以到 Django 官網進行學習。

API 實作

目錄結構:
app
│── manage.py
├── app
│ ├── settings
│ ├── init.py
│ ├── urls.py
│ └── wsgi.py
├── products
│ ├── migrations
│ │ └── init.py
│ ├── init.py
│ ├── admin.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py

serializer

透過 serializer 將資料進行序列化,與 Model 進行互動。
在 products 資料夾下新增 serializers.py 檔

from rest_framework import serializers
from models import Product

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
         model = Product
        fields = ('id', 'name', 'uploader', 'status', 'description', 'view', 'price')
        read_only_fields = ('id',)

修改 views.py

from models import Product
from serializers import ProductSerializer

class ProductViewSet(viewsets.ModelViewSet):

    queryset = Product.objects.all()
    serializer_class = ProductSerializer

新增 products 下之 urls.py 的路徑

from django.urls import path, include
from .views import *
from rest_framework.routers import DefaultRouter

from products import views


router = DefaultRouter()
router.register('', views.ProductViewSet)
app_name = 'products'

urlpatterns = [
    path('', include(router.urls) ),
]

在app 資料夾下的 urls.py 新增路徑

path('products/', include('products.urls')),

啟動服務

重新啟動 DRF 應用

docker-compose up

查看網頁

輸入 ”http://127.0.0.1:9000/products/"
,可以看到我們實作的功能。

  • 查看 Database 裡面 Product 的資料。
  • 以 POST 新增 Product

https://ithelp.ithome.com.tw/upload/images/20210930/20140477AWV4cplqyD.png

https://ithelp.ithome.com.tw/upload/images/20210930/201404777gqjq7Yb0X.png

結語

今天帶大家使用 DRF 實作第一個 API,不知道大家感覺如何呢?
雖然需要熟悉 DRF的方法需要一些時間,但是熟悉之後可以幫助我們很高效率的建立 API !


上一篇
[Day 16] - Django View , Url -- 功能執行的要角
下一篇
[Day18] - Django-REST-Framework API 呼叫及介面操作
系列文
使用Django Rest Framework, Docker, Docker Compose 製作後端服務應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言